# coding: utf-8  # 指定文件编码为utf-8，确保非ASCII字符能被正确处理

import math  # 导入math模块，但在这段代码中未被使用
import numpy as np  # 导入numpy库，用于数组和矩阵运算，以及高维数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的pyplot模块，用于绘图
import matplotlib as mpl  # 导入matplotlib库，并通常用于修改其全局配置
import scipy.stats as sts  # 导入scipy的统计模块，用于进行统计分析

# 设置matplotlib的默认参数
mpl.rcParams['axes.grid'] = 'True'  # 启用网格线
mpl.rcParams['grid.color'] = 'darkgrey'  # 设置网格线的颜色为深灰色
mpl.rcParams['lines.linewidth'] = 1  # 设置线条的宽度为1
mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=["grey"])  # 设置绘图颜色循环为仅灰色，但此处可能不会影响所有绘图

# 设定样本数量、均值和标准差
n_samples = 100
mu = 55.0
sigma = 21.0

# 创建一个图形对象
fig = plt.figure()

# 第一个子图
plt.subplot(221)
plt.xlim(0, n_samples)  # 设置x轴的范围为0到n_samples
# 生成n_samples个随机样本，并保留两位小数
samples0 = np.around(np.random.normal(loc=mu, scale=sigma, size=n_samples), 2)
# 同样的方法生成另一组样本，但均值和标准差不同
samples1 = np.around(np.random.normal(loc=mu + 5, scale=sigma / 3, size=n_samples), 2)

# 计算这两组样本的均值和标准差
mean0, sigma0 = np.mean(samples0), np.sqrt(np.var(samples0))
mean1, sigma1 = np.mean(samples1), np.sqrt(np.var(samples1))

# 标准化样本（Z得分）
samples01 = np.round((samples0 - mean0) / sigma0, 2)
samples11 = np.round((samples1 - mean1) / sigma1, 2)

# 绘制原始样本和标准化样本
plt.plot(samples0)
plt.plot(samples01, 'k')  # 'k' 表示黑色
plt.hlines(60, 0, n_samples, linestyles='dashed')  # 在y=60处绘制虚线
plt.grid(True)  # 显示网格

# 第二个子图
plt.subplot(222)
plt.xlim(0,n_samples)
plt.plot(samples1)
plt.plot(samples11,'k')
plt.hlines(60,0,n_samples,linestyles='dashed')
plt.grid(True)
# print samples
# print u'均值:%.2f;方差：%.2f' %(n_mean,n_sigma)

# 第三个子图，专门用于绘制samples0的标准化版本（Z得分）
plt.subplot(223)
plt.xlim(0,n_samples)
plt.grid(True)
# plt.hist(x_scaled,bins=99,color='b')
# plt.hist(x_scaled)
samples01=np.round((samples0-mean0)/sigma0,2)
samples11=np.round((samples1-mean1)/sigma1,2)
# print sts.describe(samples0)
# print sts.describe(samples01)
# print sts.describe(samples1)
# print sts.describe(samples11)
plt.plot(samples01)
# 在Z得分图中绘制对应于y=60的标准化值（即Z得分）的虚线
plt.hlines((60-mean0)/sigma0,0,n_samples,linestyles='dashed')
# 在图上添加文本，显示该Z得分值
plt.text(3,(60-mean0)/sigma0,np.round((60-mean0)/sigma0,2) , size=16)
# plt.scatter(30,(200-mean0)/sigma0,marker='x')
# plt.hist(samples1,bins=20,color='b')

# 第四个子图，针对samples1的标准化版本
plt.subplot(224)
plt.xlim(0,n_samples)
plt.grid(True)
plt.plot(samples11)
plt.hlines((60-mean1)/sigma1,0,n_samples,linestyles='dashed')
plt.text(3,(60-mean1)/sigma1,np.round((60-mean1)/sigma1,2) , size=16)

# 计算并打印标准正态分布中0.03的累积分布函数（CDF）值
print(sts.norm(0, 1).cdf(0.03))
# 下一行实际上没有作用，只是调用了CDF但没有将结果用于任何操作
sts.norm(0, 1).cdf(0.03)

# print u'概率：',
plt.show()
# fig.savefig('./img/Zscore.png',dpi=600)